
/**
*	file Terrain.h
*	\brief Module qui gere les terrains
*	\author Ostapenco Vladimir, Gehin Maxime
*	\version 1.0
*	\date 16/12/2013
*	Le module terrain est utilisé pour extraire un terrain d'un fichier texte, ansi que pour les collision.
*/


#ifndef terrain_h
#define terrain_h

/**
* \struct Case
* \brief Structure qui contient deux informations: un char pour determiner la nature de la case et son statut(libre ou occupé).
*/
typedef struct{
	char ch;
	enum {FREE, OCCUPIED} stat;
}Case;

/**
* \struct Terrain
* \brief Un terrain contient un nom, des dimentions en x et y ainsi qu'un tableau 2d de cases.
*/
typedef struct
{
	char * name; /*chaine de carractere*/
	int dimx;
	int dimy;
	Case **tab; /*Tableau 2d*/

}Terrain;

/**
*	terInit initialise le terrain correspondant a l'id passé en second parramètre.Les terrains sont placé dans le dossier data/Database.
*	le tableau de case est alloué grace aux dimentions du terrain indiquées en tête des fichier terrain.
*	\param pTer IN-OUT : pointeur sur Terrain
*	\param id : id du terrain qu'on initialise
*/

void terInit(Terrain *,int);

/**
*	terFree libère la memoire du tableau de case alloué
*	\param pTer : pointeur sur le Terrain qu'on veut liberer.
*/

void terFree(Terrain *);

/**
*	terGetXY récupere le carractère de la case indiquée en parametre.
*	\param pTer IN : Terrain dont on veut recuperer l'information
*	\param x IN :coordonée x
*	\param y IN :coordonée y
*/
char terGetXY(const Terrain *,const int x,const int y);

/**
*	terTestPosition teste le statut de la case passée en parametre(renvoie 1 si case libre, 0 sinon)
*	\param pTer IN Terrain où on test la case
*	\param x IN :coordonée x
*	\param y IN :coordonée y
*/
int terTestPosition(const Terrain *, const int x, const int y);

/**
*	getDimx recupère la dimention x du terrain
*	\param pTer IN : Terrain concerné
*/
int getDimx(const Terrain *);

/**
*	getDimy recupère la dimention y du terrain
*	\param pTer IN : Terrain concerné
*/
int getDimy(const Terrain *);
/**
*	terModif modifie le statut de la case passée en parametre
*	\param pTer IN-OUT Terrain qu'on veut modifier
*	\param x : coordonée x de la case
*	\param y : coordonée y de la case
* 	\param stat : statut que l'on veut affecter a la case
*/
void terModif(Terrain *, int x, int y, int stat);

/**
*	getTerName renvoie le nom d'un terrain
*	\param pTer IN : Terrain concerné
*/
char * getTerName(const Terrain *);

/**
*	terrTestRegression : test de regression du module terrain
*/
void terrTestRegression();
#endif


